package com.kimari.demo;

/**
 * 算法练习二
 * 写LoopTest.java，分别使用while/do/for循环实现1x2x...x10。
 * 设置数组是为了避免魔法值的出现
 * 根据题意我们并不知道要求 1x2x...x10
 * 是让我们算出结果
 * 还是拼接字符串
 * 为此我们用两种常数作为函数判定标志
 * 如果是 FIRST 则是拼接字符串
 * 如果是 SECOND 则是算出结果
 * 这样很好的避免了魔法值的出现
 * @author Reimu
 */
public class LoopTest {

    public static final int FIRST = 1;
    public static final int SECOND = 2;

    public static int[] nums;

    static {
        nums = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    }

    public static void whileLoop(int n) {
        if (n == FIRST) {
            int i = 1;
            while (i < nums.length) {
                System.out.print(i + "×");
                i++;
            }
            System.out.println(i);
        } else if (n == SECOND) {
            int res = 1;
            int i = 1;
            while (i <= nums.length) {
                res = res * i;
                i++;
            }
            System.out.println("1×2×...×10 = " + res);
        }
    }

    public static void doLoop(int n) {
        if (n == FIRST) {
            int i = 1;
            do {
                System.out.print(i + "×");
                i++;
            } while (i < nums.length);
            System.out.println(i);
        } else if (n == SECOND) {
            int res = 1;
            int i = 1;
            do {
                res = res * i;
                i++;
            } while (i <= nums.length);
            System.out.println("1×2×...×10 = " + res);
        }

    }

    public static void forLoop(int n) {
        if (n == FIRST) {
            int i = 1;
            for (; i < nums.length; i++) {
                System.out.print(i + "×");
            }
            System.out.println(i);
        } else if (n == SECOND) {
            int res = 1;
            for (int i = 1; i < nums.length + 1; i++) {
                res *= i;
            }
            System.out.println("1×2×...×10 = " + res);
        }
    }
}
